/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import entidades.Produto;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import util.ConnectionFactory;

/**
 *
 * @author SERVIDOR
 */
public class ProdutoDAO {
    public void cadastrarProduto(Produto produto) {
        String sql = "insert into produto(codigo_produto, nome_produto,preco_compra, preco_venda,quantidade,id_dados_produto)"
                + " VALUES(?,?,?,?,?,?)";

        Connection conn = null;
        PreparedStatement pstm = null;
        try {
            // Cria uma conexÃ£o com o banco
            conn = ConnectionFactory.getConexao();

            // Cria um PreparedStatment, classe usada para executar a query
            pstm = conn.prepareStatement(sql);
            pstm.setString(1, produto.getCodigo());
            pstm.setString(2, produto.getNome());
            pstm.setDouble(4, produto.getPreco_compra());
            pstm.setDouble(5, produto.getPreco_venda());
            pstm.setDouble(6, produto.getQuantidade());
            pstm.setInt(7,produto.getDados().getId());
            
            // Executa a sql para inserÃ§Ã£o dos dados
            pstm.execute();

        } catch (Exception e) {

            e.printStackTrace();
        } finally {

            // Fecha as conexÃµes
            try {
                if (pstm != null) {

                    pstm.close();
                }

                if (conn != null) {
                    conn.close();
                }

            } catch (Exception e) {

                e.printStackTrace();
            }
        }
    }

    public Produto getProdutoPorCodigo(String codigo) {

        String sql = "SELECT * FROM produto where codigo_produto = ?";

        Connection conn = null;
        PreparedStatement pstm = null;
        // Classe que vai recuperar os dados do banco de dados
        ResultSet rset = null;

        try {
            conn = ConnectionFactory.getConexao();

            pstm = conn.prepareStatement(sql);
            pstm.setString(1, codigo);

            rset = pstm.executeQuery();
            Produto produto = new Produto();
            // Enquanto existir dados no banco de dados, faÃ§a
            while (rset.next()) {

                // Recupera o nome do banco e atribui ele ao objeto
                produto.setNome(rset.getString("nome_produto"));

                // Recupera a idade do banco e atribui ele ao objeto
                produto.setCodigo(rset.getString("codigo_produto"));

                produto.setPreco_compra(rset.getDouble("preco_compra"));
                
                produto.setPreco_venda(rset.getDouble("preco_venda"));

                produto.setQuantidade(rset.getDouble("quantidade"));
                
                produto.getDados().setId(rset.getInt("id_dados_produto"));

                // Adiciono o contato recuperado, a lista de contatos
                return produto;
            }
        } catch (Exception e) {

            e.printStackTrace();
        } finally {

            try {

                if (rset != null) {

                    rset.close();
                }

                if (pstm != null) {

                    pstm.close();
                }

                if (conn != null) {
                    conn.close();
                }

            } catch (Exception e) {

                e.printStackTrace();
            }
        }

        return null;
    }
    public ArrayList<Produto> getProdutoPorNome(String nome) {

        String sql = "SELECT * FROM produto as p,dados_produto as d WHERE p.id_dados_produto=d.id_dados_produto and upper(nome_produto) LIKE upper('%?%')";

        Connection conn = null;
        PreparedStatement pstm = null;
        // Classe que vai recuperar os dados do banco de dados
        ResultSet rset = null;

        try {
            conn = ConnectionFactory.getConexao();

            pstm = conn.prepareStatement(sql);
            pstm.setString(1, nome);

            rset = pstm.executeQuery();
            Produto produto = new Produto();
            ArrayList<Produto> aux = new ArrayList<Produto>();
            // Enquanto existir dados no banco de dados, faÃ§a
            while (rset.next()) {

                // Recupera o nome do banco e atribui ele ao objeto
                produto.setNome(rset.getString("nome_produto"));

                // Recupera a idade do banco e atribui ele ao objeto
                produto.setCodigo(rset.getString("codigo_produto"));

                produto.setPreco_compra(rset.getDouble("preco_compra"));
                
                produto.setPreco_venda(rset.getDouble("preco_venda"));

                produto.setQuantidade(rset.getDouble("quantidade"));
                
                produto.getDados().setId(rset.getInt("id_dados_produto"));
                
                aux.add(produto);
                // Adiciono o contato recuperado, a lista de contatos
                return aux;
            }
        } catch (Exception e) {

            e.printStackTrace();
        } finally {

            try {

                if (rset != null) {

                    rset.close();
                }

                if (pstm != null) {

                    pstm.close();
                }

                if (conn != null) {
                    conn.close();
                }

            } catch (Exception e) {

                e.printStackTrace();
            }
        }

        return null;
    }
    public void atualizarProduto(String codigo,Produto produto) {
        String sql = "UPDATE produto SET nome_produto = ? and codigo_produto = ? and categoria_produto = ? and preco_de_compra = ? and preco_de_venda = ? and quantidade_produto = ? WHERE codigo_produto = ?";

        Connection conn = null;
        PreparedStatement pstm = null;

        try {
            conn = ConnectionFactory.getConexao();
            pstm = conn.prepareStatement(sql);

            pstm.setString(1, produto.getNome());
            pstm.setString(2, produto.getCodigo());
            pstm.setDouble(4, produto.getPreco_compra());
            pstm.setDouble(5, produto.getPreco_venda());
            pstm.setDouble(6, produto.getQuantidade());
            pstm.setString(7, codigo);

            pstm.execute();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {

            try {
                if (conn != null) {
                    conn.close();
                }
                if (pstm != null) {

                    pstm.close();
                }
            } catch (Exception e) {

                e.printStackTrace();
            }

        }
    }

    public void removerProduto(String codigo) {
        String sql = "DELETE FROM produto where codigo_produto=?";

        Connection conn = null;
        PreparedStatement pstm = null;

        try {
            conn = ConnectionFactory.getConexao();

            pstm = conn.prepareStatement(sql);

            pstm.setString(1, codigo);

            pstm.execute();

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {

            try {
                if (pstm != null) {

                    pstm.close();
                }

                if (conn != null) {
                    conn.close();
                }

            } catch (Exception e) {

                e.printStackTrace();
            }
        }
    }
}
